import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:provider_shopper/common/theme.dart';
import 'package:provider_shopper/models/cart_model.dart';
import 'package:provider_shopper/models/catalog_model.dart';
import 'package:provider_shopper/screens/my_cart.dart';
import 'package:provider_shopper/screens/my_catalog.dart';
import 'package:provider_shopper/screens/my_login.dart';

void main(List<String> args) {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    // MultiProvider适用于同时存在多个Provider对象的场景
    return MultiProvider(
      providers: [
        // 在当前示例中，CatalogModel对象创建之后就不再改变，因此一个Provider足矣
        Provider(create: (context) => CatalogModel()),
        // CartModel是ChangeNotifier的子类，该类要求使用ChangeNOtifierProvider.
        // 另外，CartModel依赖于CatalogModel，因此需要一个ProxyProvider
        ChangeNotifierProxyProvider<CatalogModel, CartModel>(
          create: (context) => CartModel(),
          update: (context, catalog, cart) {
            // 在update中不要创建ChangeNotifier对象，而是重用已经创建的ChangeNotifier对象（也就是这里的cart对象）
            if (cart == null) throw ArgumentError.notNull('cart');
            cart.catalog = catalog;
            return cart;
          },
        ),
      ],
      child: MaterialApp(
        title: 'Provider Demo',
        theme: appTheme,
        initialRoute: '/',
        routes: {
          '/': (context) => MyLogin(),
          MyCatalog.myCatalogKey: (context) => MyCatalog(),
          MyCart.myCartKey: (context) => MyCart(),
        },
      ),
    );
  }
}
